Графические интерфейсы пользователя Java - Тимур Сергеевич Машнин
FXML-описание графического интерфейса JavaFX-приложения имеет структуру XML-документа, однако не имеет конкретной XML-схемы.
Для использования специфических XML-элементов пространства имен языка FXML, в FXML-описание должно быть включено объявление пространства имен xmlns: fx.
Экземпляр JavaFX-компонента создается в FXML-описании с помощью тэга импорта и тэга, начинающегося с имени класса JavaFX-компонента.
FXML-описание позволяет создавать не только экземпляры JavaFX-компонентов, но и другие Java-объекты.
Экземпляр хэш-таблицы java. util. HashMap создается с помощью соответствующего тэга.
Экземпляр Java-класса, имеющего статический метод valueOf создается, используя атрибут fx: value.
Java-объект, возвращаемый методом класса-фабрики, создается, используя атрибут fx: factory.
Кроме того, для создания экземпляров классов можно переопределить фабрику JavaFXBuilderFactory, используемую по умолчанию для создания JavaFX-объектов.
Для этого при вызове в главном классе JavaFX-приложения статического метода load класса FXMLLoader необходимо в качестве аргумента указать экземпляр пользовательского класса, реализующего интерфейс BuilderFactory.
Интерфейс BuilderFactory имеет единственный метод getBuilder, возвращающий экземпляр класса, который реализует интерфейс Builder.
Поэтому необходимо также создать пользовательский класс, реализующий интерфейс Builder.
Интерфейс Builder имеет единственный метод build, возвращающий Java-объект.
Теперь, другие теги языка FXML, такие как <fx: include> и <fx: reference>.
Тэг <fx: include> языка FXML обеспечивает модульность FXML-описания и указывает своим атрибутом source имя включаемого FXML-файла, содержащего описание создаваемых JavaFX-компонентов.
Тэг <fx: reference> языка FXML своим атрибутом source позволяет сослаться на другой именованный FXML-элемент.
Атрибуты FXML-элементов могут быть нескольких типов.
Атрибут FXML-элемента может описывать свойство JavaFX-компонента.
Как альтернатива FXML-атрибуту, свойство JavaFX-компонента может описывать вложенный тэг FXML-элемента.
Атрибуты FXML-элемента, описывающие JavaFX-свойства, могут использовать различные префиксы.
Здесь тэг <fx: define> языка FXML позволяет создавать объекты, на которые можно ссылаться из любого уровня графа сцены.
Атрибут FXML-элемента может описывать статические свойства класса, при этом атрибут имеет вид:
[имя класса]. [имя свойства] =” [значение]»
Атрибут FXML-элемента также может описывать обработчик событий JavaFX-компонента.
Здесь тэг <fx: script> языка FXML обеспечивает включение в FXML-описание кода JVM-языков, таких как JavaScript, Groovy и другие.
Скриптовый код может быть включен непосредственно в тэг <fx: script>, или может содержаться в отдельном файле, который включается в FXML-описание атрибутом source тэга <fx: script>.
Визуальный графический редактор JavaFX Scene Builder существенно упрощает создание FXML-описания графического интерфейса.
Дистрибутив редактора Scene Builder доступен для скачивания по указанному адресу.
После установки, редактор Scene Builder запускается с помощью файла bin/scenebuilder. exe, который открывает главное окно, состоящее из набора панелей Library, Hierarchy, рабочей области и панелей свойств, компоновки и событий графических компонентов.
С помощью редактора Scene Builder компоненты интерфейса пользователя легко добавляются в сцену путем простого их перетаскивания из панели Library в рабочую область, а панели правой части редактора обеспечивают редактирование свойств, событий и компоновки компонентов.
Графические системы SWT и JFace
Первые реализации Java-платформы содержали графическую библиотеку Abstract Windowing Toolkit (AWT), предоставляющую такие компоненты графического интерфейса пользователя, как кнопку, флажок, список выбора, диалоговые окна, метку, прокручивающийся список, меню, панель с прокруткой, текстовую область и текстовое поле, а также панели компоновки компонентов.
Архитектура графической системы AWT была построена таким образом, что AWT-компоненты имеют своих двойников, реализованных для конкретной операционной системы, с которыми они связаны интерфейсами пакета java.awt.peer.
Поэтому система AWT называется «тяжеловесной» и отображение ее компонентов зависит от операционной системы, в которой она работает.
Для преодоления ограниченности набора и выбора внешнего вида и поведения (Look and Feel) AWT-компонентов была создана библиотека Swing.
Графическая система Swing создана на базе системы AWT и напрямую не связана, как система AWT, с операционной системой, в которой она работает.
Поэтому система Swing называется «легковесной» и в системе Swing стало возможным создать набор отображений Look and Feel, которые разработчик может выбирать, не оглядываясь на операционную систему.
Кроме того, библиотека Swing реализует архитектуру MVC (Model-View-Controller) и дополняет библиотеку AWT такими компонентами интерфейса пользователя, как панель выбора цвета, индикатор состояния, переключатель, слайдер и спиннер, панель с вкладками, таблицы и деревья, расширенными возможностями компоновки компонентов, таймером, возможностью отображения HTML-контента.
Графическая система SWT (Standard Widget Toolkit) была создана в процессе работы над проектом Eclipse и является попыткой взять лучшее из архитектур систем AWT и Swing и предоставить возможность создания быстрых интерфейсов с отображением Look and Feel, как можно более полно соответствующим операционной системе, в которой они работают.
Архитектура системы SWT построена таким образом, что SWT-компоненты представляют собой лишь Java-оболочки графических компонентов конкретной операционной системы.
Для операционной системы, в которой отсутствует реализация какого-либо компонента, система SWT обеспечивает Java-эмуляцию.
Так в системе SWT достигается скорость работы и полное соответствие внешнему виду и поведению операционной системы.
Для создания интерфейса пользователя система SWT предоставляет такие компоненты как кнопки, включая флажки и переключатели, списки, метку, меню, текстовые области, диалоговые окна, индикатор прогресса, панель с прокруткой, слайдер и спиннер, таблицы и деревья, панель с вкладками, панель выбора даты, панели инструментов, встроенный Web-браузер, гиперссылку, а также обеспечивает компоновку SWT-компонентов, встраивание AWT-компонентов, отображение OpenGL-контента, печать, поддержку операций Drag and Drop, 2D-графики, технологии Win32 OLE.
Система JFace создана на основе системы SWT и реализует архитектуру MVC (Model-View-Controller), предоставляя такие компоненты как таблицы, деревья, списки, текстовую область и диалоговые окна, обеспечивая определение пользовательских команд независимо от их представления в интерфейсе пользователя, управление шрифтами и изображениями, помощь пользователю в выборе соответствующего содержания для полей в компонентах, выполнение длительных задач.
Мы рассмотрим создание SWT/JFace приложений с помощью инструментов Eclipse-плагина WindowBuilder.
Плагин WindowBuilder обеспечивает шаблоны кода для создания Java-приложений с интерфейсом пользователя на основе библиотек Swing, SWT/JFace, RCP и XWT, предоставляя визуальный графический редактор и большой набор Wizard-мастеров.
Для установки WindowBuilder-плагина откроем среду Eclipse, в меню Help выберем Install New Software.
В окне мастера Install в поле Work with: выберем Eclipse-релиз и в разделе General Purpose Tools отметим соответствующие флажки.
Нажмем кнопку Next и установим плагины.
После установки WindowBuilder-плагина перезагрузим среду Eclipse и в перспективе Java в меню File выберем команду New | Other | WindowBuilder | SWT Designer | SWT/JFace Java Project и нажмем кнопку Next.
Введем имя проекта и нажмем кнопку Finish.
В результате будет создан Java-проект, в путь которого будут добавлены библиотеки, обеспечивающие использование библиотек SWT и JFace.
В окне Project Explorer нажмем правой кнопкой мышки на узле проекта и в контекстном меню выберем команду New | Other | WindowBuilder | SWT Designer.
Здесь раздел SWT содержит следующие мастера: